<?php
//$Id: Action.php 520 2012-08-09 08:55:19Z tomqin@gmail.com $

/**
 * The Arr Class
 *
 * @copyright   Copyright (C) 2010-2012 SupeFun.com Inc.
 * @author      TomQin <tomqin@gmail.com>
 * @license     http://www.supefun.com/license/
 */

final class Arr{


    /**
     *  global.func.php 公共函数库
     *
     * @copyright       Copyright (C) 2010-2012 ARESCMS Inc.
     * @author          TomQin <tomqin@gmail.com>
     * @license         http://www.arescms.cn/license/
     */

    public static function dropKey(array $arr, array $keys){
        foreach($keys as $key)
            unset($arr[$key]);
        return $arr;
    }

    /**
     * 返回一个数组中的值
     *
     * @param array     数组
     * @param string    键值
     * @param mixed     默认值
     * @return mixed
     */
    public static function get($array, $key, $default = null) {
        if(array_key_exists($key, $array)) {
            return $array[$key];
        }
        return $default;
    }

    /**
     * 返回一个数组中的字符串
     *
     * @param array     数组
     * @param string    键值
     * @param mixed     默认值
     * @return mixed
     */
    public static function getString($array, $key, $default = '') {
        return trim(isset($array[$key]) ? (string)$array[$key] : $default);
    }

    /**
     * 返回一个数组中的整型值
     *
     * @param array     数组
     * @param string    键值
     * @param integer   默认值
     * @return integer
     */
    public static function getInt($array, $key, $default = 0) {
        return intval(isset($array[$key]) ? $array[$key] : $default);
    }

    /**
     * 返回一个数组中的浮点值
     *
     * @param array     数组
     * @param string    键值
     * @param integer   默认值
     * @return integer
     */
    public static function getDouble($array, $key, $default = 0) {
        return doubleval(isset($array[$key]) ? $array[$key] : $default);
    }

    /**
     * 返回一个数组中的长整型值
     *
     * @param array     数组
     * @param string    键值
     * @param integer   默认值
     * @return integer
     */
    public static function getLong($array, $key, $default = 0){
        return sprintf('%u', array_get($array, $key, $default));
    }

    /**
     * 返回一个数组中的布尔判断值
     *
     * @param array     数组
     * @param string    键值
     * @param mixed     真值
     * @param mixed     假值
     * @return mixed
     */
    public static function getBool($array, $key, $true = 1, $false = 0){
        return (isset($array[$key])&&$array[$key]) ? $true : $false;
    }

    /**
     * 返回一个数组中在枚举范围内的值
     *
     * @param array     数组
     * @param string    键值
     * @param array     枚举数组
     * @param mixed     默认值
     * @return mixed
     */
    public static function getEnum($array, $key, $enum, $default = ''){
        if(isset($array[$key])){
            return in_array($array[$key], $enum) ? $array[$key] : $default;
        }else{
            return $default;
        }
    }

    /**
     * 返回一个数组中在某一范围内的整数
     *
     * @param array     数组
     * @param string    键值
     * @param array     最小/大值的数组
     * @param integer   默认值
     * @return integer
     */
    public static function getRange($array, $key, $range, $default = 0){
        if(isset($array[$key])){
            $var = intval($array[$key]);
            list($min, $max) = $range;
            if($min > $max){
                $tmp = $min;
                $min = $max;
                $max = $tmp;
            }
            return ($var >= $min && $var <= $max) ? $var : $default;
        }else{
            return $default;
        }
    }
    /**
     * 返回一个数组中的符合模式匹配的字符串
     *
     * @param array     数组
     * @param string    键值
     * @param string    规则匹配
     * @param string    默认值
     * @return string
     */
    public static function getMatch($array, $key, $rule, $default){
        if(isset($array[$key])){
            return preg_match($rule, $array[$key]) ? $array[$key] : $default;
        }else{
            return $default;
        }
    }
}


if (!function_exists('array_replace_recursive'))
{
  function array_replace_recursive($array, $array1){
    function recurse($array, $array1){
      foreach ($array1 as $key => $value){
        // create new key in $array, if it is empty or not an array
        if (!isset($array[$key]) || (isset($array[$key]) && !is_array($array[$key]))){
          $array[$key] = array();
        }

        // overwrite the value in the base array
        if (is_array($value)){
          $value = recurse($array[$key], $value);
        }
        $array[$key] = $value;
      }
      return $array;
    }

    // handle the arguments, merge one by one
    $args = func_get_args();
    $array = $args[0];
    if (!is_array($array)){
      return $array;
    }
    for ($i = 1; $i < count($args); $i++){
      if (is_array($args[$i])){
        $array = recurse($array, $args[$i]);
      }
    }
    return $array;
  }
}
?>